﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ITProject.Domain.Entities;

namespace ITProject.Repository.Abstract
{
    /// <summary>
    /// Interfejs do zarządzania wiadomościami wewnętrznymi systemu ITProject.
    /// Autor: Jakub Szatkowski
    /// </summary>
    public interface IMessageRepository
    {
        /// <summary>
        /// Pozwala na wysyładnie wiadomości.
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <param name="message">Wiadomość.</param>
        void Send(Message message);

        /// <summary>
        /// Pozwala na usuwanie wiadomości.
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <param name="message">Identyfikator wiadomości</param>
        void Delete(int messageId);

        /// <summary>
        /// Zaznacza wiadomość jako przeczytaną.
        /// Autor: Jakub Szatkowski.
        /// </summary>
        /// <param name="message">Wiadomość.</param>
        void Read(Message message);

        /// <summary>
        /// Pobiera listę wiadomości, których odbiorcą jest użytkownik o id równym receiverId.
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <param name="ReceiverId">Id użytkownika, którego wiadomości pobieramy.</param>
        /// <returns>Lista wiadomości użytkownika.</returns>
        IEnumerable<Message> GetInMessages(int receiverId);

        /// <summary>
        /// Pozwala na pobranie encji wiadomości dzięki kluczowi encji.
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <param name="messageId">Id wiadomości jaką chcemy pobrać.</param>
        /// <returns>Encja wiadomości.</returns>
        Message GetMessageById(int messageId);
    }
}
